// 迭代器设计模式  

// 场景： 你我协同开发一个任务清单应用  
// my code ======================
const todos = {
    lift: ['吃饭', '睡觉', '打豆豆'],
    learn:['英语','数学','健身'],
    work: ['咖啡','奶茶'],

    // 提供一个供外部使用的遍历该对象中的属性的方法
    each: function(callback){
        const all = [].concat([this.lift,this.learn,this.work])
        for(const item of all){
            callback(item)
        }
    },

    // 可迭代接口
    [Symbol.iterator]: function(){
        const all = [...this.lift, ...this.learn, ...this.work]
        let index = 0
        return {
            next: function(){
                return {
                    value: all[index],
                    done: index++ >= all.length
                }
            }
        }
    }
}
// your code ======================
// 每个对象内的内容都要去遍历，高耦合
// for(const item of todos.lift){
//     console.log(item)
// }
// for(const item of todos.learn){
//     console.log(item)
// }
// for(const item of todos.work){
//     console.log(item)
// }

todos.each(function(item){
    console.log(item)
})

console.log('------------------')

for(const item of todos){
    console.log(item)
}
